﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Xml;
using Microsoft.MSE.Catalog.Contracts.Messages;

namespace Microsoft.MSE.Catalog.Contracts.Services
{
    /// <summary>
    /// 
    /// </summary>
    [ServiceContract(Namespace = Schemas.Services, Name="RuntimeModel")]
    public interface IRuntimeModel
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [OperationContract]
        GetIDFromNameResponse GetIDFromName(GetIDFromNameRequest request);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [OperationContract]
        GetOperationResponse GetOperation(GetOperationRequest request);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [OperationContract]
        GetOperationVersionsForEndpointAndActionResponse GetOperationVersionsForEndpointAndAction(GetOperationVersionsForEndpointAndActionRequest request);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [OperationContract]
        GetOperationVersionsForEndpointAndFirstBodyElementResponse GetOperationVersionsForEndpointAndFirstBodyElement(
            GetOperationVersionsForEndpointAndFirstBodyElementRequest request);
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [OperationContract]
        GetPolicyResponse GetPolicy(GetPolicyRequest request);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [OperationContract]
        GetRuntimeServerByNameResponse GetRuntimeServerByName(GetRuntimeServerByNameRequest request);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [OperationContract]
        ValidateOperationVersionRequestResponse ValidateOperationVersionRequest(ValidateOperationVersionRequestRequest request);
    }
}